Move bits from N4258. Mark vector's move-constructor unconditionally noexcept in C++1z git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@242148 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/vector b/include/vector index 65a087c..c168c8e 100644 --- a/include/vector +++ b/include/vector 
@@ -553,7 +553,11 @@  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES  _LIBCPP_INLINE_VISIBILITY  vector(vector&& __x) +#if _LIBCPP_STD_VER > 14 + _NOEXCEPT; +#else  _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value); +#endif  _LIBCPP_INLINE_VISIBILITY  vector(vector&& __x, const allocator_type& __a);  _LIBCPP_INLINE_VISIBILITY @@ -1220,7 +1224,11 @@  template <class _Tp, class _Allocator>  inline _LIBCPP_INLINE_VISIBILITY  vector<_Tp, _Allocator>::vector(vector&& __x) +#if _LIBCPP_STD_VER > 14 + _NOEXCEPT +#else  _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value) +#endif  : __base(_VSTD::move(__x.__alloc()))  {  #if _LIBCPP_DEBUG_LEVEL >= 2 @@ -2195,7 +2203,11 @@  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES  _LIBCPP_INLINE_VISIBILITY  vector(vector&& __v) +#if _LIBCPP_STD_VER > 14 + _NOEXCEPT; +#else  _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value); +#endif  vector(vector&& __v, const allocator_type& __a);  _LIBCPP_INLINE_VISIBILITY  vector& operator=(vector&& __v) @@ -2785,7 +2797,11 @@  template <class _Allocator>  inline _LIBCPP_INLINE_VISIBILITY  vector<bool, _Allocator>::vector(vector&& __v) +#if _LIBCPP_STD_VER > 14 + _NOEXCEPT +#else  _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value) +#endif  : __begin_(__v.__begin_),  __size_(__v.__size_),  __cap_alloc_(__v.__cap_alloc_) 
diff --git a/test/std/containers/sequences/vector.bool/move_noexcept.pass.cpp b/test/std/containers/sequences/vector.bool/move_noexcept.pass.cpp index ab32bd0..132186b 100644 --- a/test/std/containers/sequences/vector.bool/move_noexcept.pass.cpp +++ b/test/std/containers/sequences/vector.bool/move_noexcept.pass.cpp 
@@ -43,7 +43,12 @@  }  {  typedef std::vector<bool, some_alloc<bool>> C; + // In C++17, move constructors for allocators are not allowed to throw +#if TEST_STD_VER > 14 + static_assert( std::is_nothrow_move_constructible<C>::value, ""); +#else  static_assert(!std::is_nothrow_move_constructible<C>::value, ""); +#endif  }  #endif  } 
diff --git a/test/std/containers/sequences/vector/vector.cons/move_noexcept.pass.cpp b/test/std/containers/sequences/vector/vector.cons/move_noexcept.pass.cpp index 46cad99..b7bbfaa 100644 --- a/test/std/containers/sequences/vector/vector.cons/move_noexcept.pass.cpp +++ b/test/std/containers/sequences/vector/vector.cons/move_noexcept.pass.cpp 
@@ -44,7 +44,12 @@  }  {  typedef std::vector<MoveOnly, some_alloc<MoveOnly>> C; + // In C++17, move constructors for allocators are not allowed to throw +#if TEST_STD_VER > 14 + static_assert( std::is_nothrow_move_constructible<C>::value, ""); +#else  static_assert(!std::is_nothrow_move_constructible<C>::value, ""); +#endif  }  #endif  }